package com.fallsvc.user.listener;

import com.fallsvc.common.utils.JsonUtil;
import com.fallsvc.common.utils.MailUtil;
import com.fallsvc.user.constant.Constants;

import com.fallsvc.user.dataobject.UserInfo;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.io.IOException;

/**
 * @auther falls_vc
 * description:
 * @date 2025/9/24  10:26
 */
@Slf4j
@Component
public class UserQueueListener {

    @Autowired
    private MailUtil mailUtil;

//    @RabbitListener(queues = Constants.USER_QUEUE_NAME)
//    public void handler(Message message, Channel channel) throws IOException {
//        long deliveryTag = message.getMessageProperties().getDeliveryTag();
//
//        try{
//            String body = new String(message.getBody());
//            log.info("收到用户信息body：{}",body);
////             TODO 发送邮箱
//
//            //确认
//            channel.basicAck(deliveryTag,true);
//        } catch (Exception e) {
//            log.error("邮箱发送失败！！e:",e);
//            //否定确认
//            channel.basicNack(deliveryTag,true,true);
//
//        }
//    }

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = Constants.USER_QUEUE_NAME,durable = "true"),
            exchange = @Exchange(value = Constants.USER_EXCHANGE_NAME,durable = "true",type = ExchangeTypes.FANOUT)
    ))
    public void handler(Message message, Channel channel) throws IOException {
        long deliveryTag = message.getMessageProperties().getDeliveryTag();

        try{
            String body = new String(message.getBody());
            log.info("收到用户信息body：{}",body);
//           发送邮箱

            UserInfo userInfo = JsonUtil.parseJson(body,UserInfo.class);
            mailUtil.send(userInfo.getEmail(),"欢迎加⼊博客论坛",toContent(userInfo.getUserName()));

            //确认
            channel.basicAck(deliveryTag,true);
        } catch (Exception e) {
            log.error("邮箱发送失败！！e:",e);
            //否定确认
            channel.basicNack(deliveryTag,true,true);

        }
    }

    private String toContent(String userName) {
        String content = new StringBuilder()
                .append("尊敬的").append(userName).append(", 您好! <br/>")
                .append("感谢您注册成为我们博客社区的⼀员! 我们很⾼兴您决定加⼊我们的⼤家庭. <br/>")
                .append("您的注册信息如下: </br/>")
                .append("⽤⼾名:").append(userName).append("<br/>")
                .append("为了确保您的账⼾安全，请妥善保管您的登录信息. 如果使⽤过程中, 遇到任何 问题, 欢迎联系我们的⽀持团队. XXXX@xxx.com <br/>")
                .append("再次感谢您的加⼊，我们期待看到您的精彩内容！<br/>")
                .append("最好的祝愿<br/>")
                .append("博客团队").toString();
        return content;
    }
}
